1. Field of Art
The disclosure generally relates to the simulation of circuits, and more specifically to hardware and software co-simulation.
2. Description of the Related Art
Computer simulation of digital hardware systems has become a common technique to reduce the cost and time required for the design of such hardware systems. Simulating digital hardware allows a designer to predict the functionality and performance of the hardware prior to fabricating the hardware. As more and more digital systems incorporate a processor, including a microprocessor, a digital signal processor, or other special purpose computer processor, there has been increased effort to develop a simulation system that includes simulating the hardware and simulating the running of software on a processor that is included in the digital system. Having such a simulation system allows a designer to test the operation of software on the processor before a physical processor is available. Thus, for example, a designer may be able to start designing a system incorporating a new microprocessor before the manufacturer actually releases physical samples of the microprocessor. This clearly can save time and money.
These simulation systems that simulate hardware as well as software running on that hardware are referred to as hardware and software co-simulation systems. In hardware and software co-simulation, a hardware simulator (such as a System Verilog hardware description language simulator (HDL simulator)) is provided to simulate a hardware model/system and a software simulator (such as an Instruction Set Simulator (ISS)) is provided to simulate a software application. In the co-simulation environment, both the hardware and software simulators must communicate with each other, synchronize, and control the running state of the other simulators. The mechanisms to communicate, synchronize, and control other simulators play an important role in the performance and ease of use of the co-simulation. The different mechanisms that exist for communicating, synchronizing, and controlling are either complex in implementation or negatively affect performance due to busy-waiting synchronization techniques used.